Module Rappels et compléments sur R et RStudio
23/01/2025
Ce diaporama de formation a été rédigé dans le but d’être le support visuel des formations dispensées au MASA.
Ces formations s’adressent à des agents qui ont suivi la formation R initiation.
Elles sont données en présentiel sur une durée de 3 jours, les modules de cette formation sont ajustables suivants le choix des agents.
Champ couvert par cette formation
Ce support couvre les rappels et complèments sur R et l’environnement du MASAF.
Pour information, Les modules de la formation R-perfectionnement sont:
01 - Module Rappels
02 - Module Fonctions
03 - Module Cartes statiques et interactives
04 - Module Création de graphiques avec ggplot2
05 - Module Quarto
06 - Module Parquet
07 - Module Initiation à l’écriture d’applications Shiny
Ils sont orientés pour être utile aux agents du SSM Agriculture et se concentrent sur une utilisation de R via RStudio qui est mise à disposition des agents sur la plateforme interne Cerise basée sur RStudio Workbench.
Logiciel de traitement de données et analyse statistique :
offre un environnement interactif de développement statistique, analytique et graphique ;
est doté d’un langage de programmation R ;
permet d’accéder à des données, de les manipuler et les analyser ;
S’interface avec les bases de données : Oracle, SYBASE, PostgreSQL, SQLITE…
Remplace SAS ou SPSS
Logiciel IDE : Integrated Development Environment
| Avantages | Inconvénients |
|---|---|
|
|
|
|
|
|
|
|
|
|
Cerise est organisé en plusieurs répertoires :
00-Espace-Personnel => espaces personnels des agents, accessible par l’agent uniquement
01-Espace-de-Partage => lieu de partage général entre les différents acteurs
02-Espace-de-Production => plateforme de stockage des données brutes collectées, ainsi que des fichiers de données et programmes issus des traitements statistiques réalisés par l’équipe projet
03-Espace-de-Diffusion => mise à disposition au sein du SSM des données issues des traitements statistiques réalisés en amont => Ces deux derniers espaces sont découpés par opérations statistiques
04-Espace-Echanges => stockage des fichiers de données à transmettre aux autres applications du SI CASSIS (par exemple Agreste) ainsi qu’aux SI des partenaires extérieurs
Objet élémentaire de R, une dimension
Ensemble de valeurs, appelées éléments, de même nature (nombres, chaînes de caractères, booléens…)
Création de vecteurs avec la fonction c() :
x ← c(TRUE, TRUE, FALSE) is.logical(x)
x ← c(8.04, 18.01, 11.05, 14.05) is.numeric(x)
x ← c("Chaîne1", "804", "Chaîne3") is.character(x)
Une array est composée d’un ou de plusieurs éléments de mêmes types, organisés en plusieurs dimensions.
# Création d'une matrice de numériques avec deux lignes et trois colonnes, remplissage par colonne.`
matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3)
# [,1] [,2] [,3]
# [1,] 1 3 5
# [2,] 2 4 6Une data.frame est composée de vecteurs nommés de tailles égales mais pouvant être de types différents.
Une liste est composée d’objets différents.
Création avec les fonctions data.frame() et list() :
x ← list(c(TRUE, TRUE, FALSE), # 1er élément : un vecteur de trois booléens
c(8.04, 18.01, 11.05, 14.05), # 2e élément : un vecteur de quatre numériques
c(""804")) # 3e élément : un vecteur d'une chaîne de caractères
`x ← data.frame(nom=c("Yaël","Luan","Jade"), # 1er élément : un vecteur « nom » de trois chaînes de caractères`
sexe = factor(c("H","F","F"), # 2e élément : un vecteur « sexe » de trois chaînes de caractères (en facteurs)
age = c(5,1,3)) # 3e élément : un vecteur « age » de trois numériques
x <- c("Marion", "Benjamin", "Hélène", "Raymond"))
x[1] renvoie "Marion"
x[c(1, 2)] renvoie le vecteur c("Marion", "Benjamin")
x <- c(8.04, 18.01, 11.05, 14.05)
x[x < 10] renvoie 8.04
x[x > 10] renvoie le vecteur c(18.01, 11.05, 14.05)
x[x >10 & x < 15] renvoie le vecteur c(11.05, 14.05)
Indexation par position :
x <- matrix(c("Marion", "Benjamin", "Hélène", "Raymond"), nrow = 2, ncol = 2)
x[1,] renvoie le vecteur c("Marion", "Hélène")
x[,2] renvoie le vecteur c("Hélène", "Raymond")
x[2,1] renvoie "Benjamin"
x <- list(c(TRUE, TRUE, FALSE), c(8.04, 18.01, 11.05, 14.05), "804")
x[[2]] renvoie le deuxième vecteur de la liste x soit c(8.04, 18.01, 11.05, 14.05)
x[[2]][1] renvoie le premier élément du deuxième vecteur de la liste x soit 8.04
x <- list(grp = c("Auguste", "Justine", "Sébastien", "Anne-Marie"), prt = c("Hélène", "Raymond"), enf = c("Marion", "Benjamin")
x$grp renvoie le vecteur nommé "grp" de la liste x soit c("Auguste", "Justine", "Sébastien", "Anne-Marie")
x$enf[1] renvoie le premier élément du vecteur nommé "enf" de la liste x soit "Marion"
Indexation par position : comme pour les matrices
Indexation par nom : les vecteurs d’une data.frame sont nommés et accessibles directement dans les crochets ou via l’opérateur $
Les moyens d’indexation peuvent se combiner
→ Il y a donc une multitude de façons d’accéder à une valeur dans un data.frame !
Les tables de données sont très souvent des objets de type data.frame. Fonctions utiles :
str() donne la structure de la table, names() le vecteur des noms de colonnes
head() et tail() affichent respectivement, par défaut, les 6 premières et les 6 dernières lignes de la table
dim() renvoie un vecteur composé du nombre de lignes et du nombre de colonnes de la table
La partie Manipulation de données va fournir les outils nécessaires aux traitements classiques à opérer sur une table de données.
À part pour la lecture et l’écriture de fichiers, les outils proposés relèvent des packages dplyr et tidyr : ils sont d’un usage plus simple que les outils R de base et couvrent beaucoup des fonctionnalités les plus courantes.
Objectif de dplyr : rassembler dans un seul package les outils de manipulation de données les plus importants pour l’analyse des données
⇒ ensemble de fonctions correspondant à un ensemble d’opérations élémentaires
Deux principes pour les packages tidyr et dplyr :
Usage de fonctions « verbe » toutes construites sur le même principe : le premier paramètre est la table de données sur laquelle on travaille.
Usage de l’opérateur pipe (issu du package magrittr) Dans R-Studio, le raccourci clavier pour cet opérateur est : Ctrl + Shift + M
ma_table[1,] : toutes les variables pour la première observation
ma_table[,4] : toutes les observations de la 4e variable
ma_table[,''Profession''] : toutes les observations de la variable Profession
ma_table[1,4] : première observation de la 4e variable
Avec le package dplyr :
Pour sélectionner des colonnes dans une table, on utilise la fonction
Pour filtrer les lignes dans une table à l’aide de conditions logiques, on utilise la fonction filter()
ma_table %>% filter(Profession == ''Militaire'')
ma_table %>% filter(Age < 30) %>% select(Nom_prenom)
Avec R de base, on utilise l’opérateur d’affectation :
table$new_var <- variable → formule générique
table$new_var <- valeur_constante → création d’une constante
table$new_var <- fonction(table$var1) → création à partir d’une formule
table$new_var <- table$var1 + table$var2 → création à partir d’opérations
table$new_var <- vecteur1 OU table1$new_var <- table2$var1 → création à partir de variables externes
table$new_var <- ifelse(table$varref < x, val1, val2) OU table$new_var <- case_when(table$varref < x ~ val1, TRUE ~ val2) → traitement conditionnel
Avec le package dplyr, on utilise la fonction mutate() qui permet de créer plusieurs variables à la fois et permet de s’affranchir de l’indexation :
`table ← table %>% mutate(new_var1 = var1, newvar2 = var2)` →
formule générique
`table ← table %>% mutate( new_var1 = constante,` → création
d'une constante
`new_var2 = fonction(var1),` → création à partir
d'une formule
`new_var3 = var1 + var2,`→ création à partir d'opérations
arithmétiques\
`new_var4 = vecteur1)` → création à partir de variables externes
Pour modifier une variable on affecte la nouvelle valeur à une variable existante
maTable %>% arrange(variables_de_tri)
→ possibilité de trier selon plusieurs colonnes : les variables de tri doivent être séparées par une virgule.
→ on encadre les variables qu’il faut trier de façon décroissante par la fonction desc().
Il est possible de réaliser une jointure à l’aide de plusieurs variables identifiantes : l’argument by s’écrit alors c(‘’id1’‘,’‘id2’’, …)
Lorsque les variables de jointure ont des noms différents dans les deux tables, l’argument by prend comme paramètre un vecteur du type c(‘’id1_tab1’’ = ‘’id1_tab2’‘,’‘id2_tab1’’ = ‘’id2_tab2’’,…)
Si rien n’est précisé, la fusion se fait sur l’ensemble des variables portant le même nom dans les deux tables
summarise()maTable %>% summarise(fonctions_stat(variable))
maTable %>% group_by(var_groupe)%>% summarise(fonctions_stat(variable))%>% ungroup()
→ possibilité de calculer plusieurs statistiques en séparant les instructions par une virgule
→ on peut utiliser les fonctions statistiques de base telles que max, min, mean, sd, n…
→ ungroup permet de ne plus tenir compte du regroupement par la suite (avec l’argument drop = FALSE)
Pour réorganiser une table, c’est à dire passer des lignes en colonnes ou inversement, on utilise les fonctions pivot_wider() et pivot_longer() du package tidyr.
maTable %>% pivot_wider(col_de_noms, col_de_valeurs)
col_de_noms = nom de la variable dont les modalités deviendront les intitulés de colonne
col_de_valeurs = nom de la variable à utiliser pour remplir les colonnes
maTable %>% pivot_longer( variables_apivoter , names_to = "indicateur", values_to = "valeur")
variables_a_pivoter = nom de l’ensemble des variables à représenter
names_to = nom de la première colonne à créer
values_to = nom de la deuxième colonne à créer
| Type | Lecture | Ecriture |
|---|---|---|
| Texte | la fonction r e ader::read_delim | la fonction r e adr::write_delim |
| RDS | Fonction read_rds | Fonction readr::write_rds |
| XLS | les fonctions du package readxl | les fonctions du package openxlsx |
| SAS ou SPSS | les fonctions read_sas et read_spss du package haven. Attention : il vaut mieux exporter au format texte dans le logiciel d’origine pour le lire en tant que données texte dans R. | il vaut mieux exporter au format texte et lire le fichier dans le logiciel d’origine en tant que fichier au format texte ! |
| ODS | la fonction read_ods du package readODS | la fonction write_ods du package readODS |
| Parquet | Les packages arrow et duckdb |
Le package arrow] |
R offre la possibilité d’effectuer des requêtes SQL sur des bases de données externes.
Des informations pour la connexion sont nécessaires : library(RPostgres)
cnx <- dbConnect(Postgres(), dbname = ''sirene'', port = 5432, host = ''00.11.22.33'', user = ''nom_user'', password = ''mdp'')
dbGetQuery(cnx, ''SELECT * FROM TABLE'')
1.3 Comment travailler avec R au MASA ?
Depuis la plate-forme CERISE :
⇒ Adresse : https://rstudio.agriculture.rie.gouv.fr
⇒ PISTACHE : Pistache > Traitements statistiques et Diffusion > R > Migration SPSS et SAS vers R > Accès au WIKI Cerise - R > Accéder à Cerise
En local sur son poste, sans intervention de Pastel
Existence d’une plate-forme CERISE de Préproduction :
https://rstudio-pprd.agriculture.rie.gouv.fr